package vue.affectation;

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

import metier.AffectEleve;
import metier.Eleve;
import metier.Grade;
import metier.Stage;
import vue.commun.JPanJTable;
import vue.commun.JPanRechercherEleve;
import vue.eleve.RechercherEleve;
import configuration.MessageAppli;
import ctr.commun.CommunGest;

public class JPanAfficherAffectations extends RechercherEleve{
	
	private static final long serialVersionUID = -8258905260255616984L;
	private String titre;
	private Eleve eleve;

	/**
	 * Constructeur de copie
	 * @param jPanModifierEleve
	 */
	public JPanAfficherAffectations(JPanAfficherAffectations jPanAfficherGrades) {
		this.eleve = jPanAfficherGrades.getEleve();
		afficher();
	}
	
	/**
	 * Constructeur.
	 * @param titre
	 */
	public JPanAfficherAffectations(String titre) {
		this.titre = titre;
		afficher();
	}
	
	/**
	 * Integration du panel rechercher
	 * @param titre
	 */
	public void afficher() {
		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		// Recuperation de la liste des stages.
		ArrayList<Stage> lStage = communGest.getListeStage();
		if ( !lStage.isEmpty()){
			// Creation du pannel de saisie pour la recherche
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			// Ajout du panel de recherche dans le panel Modifier eleve
			this.setLayout(new BorderLayout(2,1));
			this.add(jPanRechercherEleve, BorderLayout.NORTH);
			
			// Ajout du panel de modification.
			if ( eleve != null){
				this.add(partieAffectations(), BorderLayout.CENTER);
			}
		}else{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + ", ajout d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	}
	
	/**
	 * Partie affichage tableau
	 * @param lStage
	 * @return
	 */
	private JPanel partieAffectations(){
		// Recuperation des affectations
		CommunGest communGest = new CommunGest();
		ArrayList<AffectEleve> lAffect = communGest.getListeAffectEleve(eleve.getIdEleve());
		
		Grade grade = communGest.getGrade(eleve.getIdGrade());
				
		//nom des colonnes
		Vector<Object> nomColonne= new Vector<Object>(Arrays.asList(new String[] {"Affectation", "Date de debut", "Date de fin"}));
		
		//valeurs des lignes
		Vector<Vector<Object>> dataVector= new Vector<Vector<Object>>();
		
		// Recuperation  des eleves.
		if ( lAffect != null && !lAffect.isEmpty()){
			for (AffectEleve affectEleve : lAffect) {
				// Creation d'un vector par eleve.
				dataVector.add(affectEleve.getVector());
			}
		}
		String titre = "Affectation du : " + grade.getAbrev() + " " + eleve.getNomEleve() + " " + eleve.getPrenom();
		JPanJTable jPanTable = new JPanJTable(titre, dataVector, nomColonne, null);
		jPanTable.getJtable().setAutoCreateRowSorter(true);
		return jPanTable;
	}
	
	public String getTitre() {
		return titre;
	}

	@Override
	public JPanel init(){
		return new JPanAfficherAffectations(this);
	}

	/**
	 * @return the eleve
	 */
	public Eleve getEleve() {
		return eleve;
	}

	/**
	 * @param eleve the eleve to set
	 */
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
	}

}
